package org.lc.design.samples.case1;


import lombok.extern.slf4j.Slf4j;

/**
 * 数据处理抽象类
 * （模板方法模式在父类中列出一般的步骤然后让具体的子类定义实现细节）
 *
 * @author lc
 * @date 2024/7/5
 */
@Slf4j
public abstract class DataProcessor {

    protected abstract String getTextFormat();

    private final void importData(String textFormat) {
        log.info("import {} file", textFormat);
    }

    public void dataProcessor() {
        String textFormat = this.getTextFormat();

        // 数据导入
        this.importData(textFormat);

        // 数据读取
        this.readData();

        // 数据清洗
        this.cleanData();

        // 数据转换
        this.converterData();

        // 数据存储
        this.saveData(textFormat);
    }

    protected abstract void readData();

    protected abstract void cleanData();

    protected abstract void converterData();

    private final void saveData(String textFormat) {
        log.info("saving {} data", textFormat);
    }
}
